Linux/xencommons: Use oxenstored by default when available
authorIan Campbell <ian.campbell@citrix.com>
Fri, 16 Dec 2011 18:46:27 +0000 (18:46 +0000)
committerIan Campbell <ian.campbell@citrix.com>
Fri, 16 Dec 2011 18:46:27 +0000 (18:46 +0000)
oxenstored is an ocaml implementation of the xenstore daemon. It is faster,
more scalable and more reliable than the C xenstored.

In particular the transaction model in oxenstored does not involve taking a
complete copy of the database and aborting on any (even non-conflicting) other
change.

There is a paper on the design and implementation of oxenstored at
http://gazagnaire.org/pub/GH09.pdf which includes a performance evaluation and
comparison with the C daemon etc.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
tools/hotplug/Linux/init.d/sysconfig.xencommons
tools/hotplug/Linux/init.d/xencommons

index d20c85d5ccc9fbde98633bc1a6a076b07a0801ee..65432045973014ae56c6ced7a89887ab1d82ba72 100644 (file)
@@ -1,6 +1,9 @@
 # Log xenconsoled messages (cf xl dmesg)
 #XENCONSOLED_TRACE=[none|guest|hv|all]
 
+# Select xenstored implementation
+#XENSTORED=[oxenstored|xenstored]
+
 # Log xenstored messages
 #XENSTORED_TRACE=[yes|on|1]
 
index f02b25dabb1a3a989886ef77a8614f157e43878a..862dd9c2dbe4b92baa234218299dd7f5e392134b 100644 (file)
@@ -65,8 +65,19 @@ do_start () {
                rm -f "$XENSTORED_ROOTDIR"/tdb* &>/dev/null
                test -z "$XENSTORED_TRACE" || XENSTORED_ARGS=" -T /var/log/xen/xenstored-trace.log"
 
-               echo -n Starting xenstored...
-               xenstored --pid-file=/var/run/xenstored.pid $XENSTORED_ARGS
+               if [ -n "$XENSTORED" ] ; then
+                   echo -n Starting $XENSTORED...
+                   $XENSTORED --pid-file /var/run/xenstored.pid $XENSTORED_ARGS
+               elif [ -x /usr/sbin/oxenstored ] ; then
+                   echo -n Starting oxenstored...
+                   /usr/sbin/oxenstored --pid-file /var/run/xenstored.pid $XENSTORED_ARGS
+               elif [ -x /usr/sbin/xenstored ] ; then
+                   echo -n Starting C xenstored...
+                   /usr/sbin/xenstored --pid-file /var/run/xenstored.pid $XENSTORED_ARGS
+               else
+                   echo "No xenstored found"
+                   exit 1
+               fi
 
                # Wait for xenstored to actually come up, timing out after 30 seconds
                 while [ $time -lt $timeout ] && ! `xenstore-read -s / >/dev/null 2>&1` ; do